package com.example.controller;

import com.example.model.CartItem;
import com.example.model.Order;
import com.example.model.Product;
import com.example.model.User;
import com.example.service.CartItemService;
import com.example.service.OrderService;
import com.example.service.ProductService;
import com.example.service.PropertyService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Controller
@Slf4j
public class CartController {

    @Autowired
    ProductService productService;

    @Autowired
    CartItemService cartItemService;

    @Autowired
    OrderService orderService;
    @RequestMapping("cart")
    public String cart(Model model, HttpSession session) throws Exception {//这个是查询购物车的方法，入参为用户ID
        //2,根据session查出是用户信息，
        User user = (User) session.getAttribute("user");
        //3，以购物车格式来查询当前user的购物车状况，也就是根据uid来查购物车表，以获取当期购物车内的商品数据。
        List<CartItem> cartList = cartItemService.getCart(user.getId());//这个是从Session中拿到的user的id,以Uid的形式进入cart表中寻找数据。
        model.addAttribute("cartList", cartList);//老样子，产品（id，名称，价格，），购物车（产品ID，总价，数量，用户ID，产品对象），购物车列表（购物车货物对象）
        return "cart";
    }

    @RequestMapping("addCart")
    @ResponseBody
    public String addCart(Integer pid, Integer num, Model model, HttpSession session){//添加选中数量的种类，一般是针对一种商品的，属于一个新增方法。
        //1,先根据入参id查出商品详情。
        Product product = productService.getById(pid);//这个是商品id
        // 2,根据session查出是用户信息，
        User user = (User) session.getAttribute("user");
        //3.把数据的添加根据用户ID写一条新数据，然后加入cart.
        CartItem cartItem = new CartItem();
        cartItem.setNumber(num);//总数
        BigDecimal Bnum =new BigDecimal(num);
        cartItem.setPid(pid);//商品id
        cartItem.setUid(user.getId());//用户id
        cartItem.setSum(Bnum.multiply(product.getPrice()));//总价
        cartItemService.save(cartItem);//这个id是自动生成的，用于单件添加行为的删除用。

        return "success";//添加结束无需跳转，只需要换个按钮样式。这个需要结合html和script来完成。
    }

    @RequestMapping("changeCartNum")
    @ResponseBody
    public String changeCartNum(Integer id,Integer num,Model model,HttpSession session){
        User user = (User) session.getAttribute("user");
        CartItem cartItem = cartItemService.getById(id);
        Product product = productService.getById(cartItem.getPid());
        cartItem.setProduct(product);
        if(cartItem!=null && cartItem.getProduct().getStock()>=0){//如果库存够
            cartItem.setNumber(num);//生成新总数
            BigDecimal Bnum =new BigDecimal(num);
            cartItem.setSum(Bnum.multiply(product.getPrice()));//生成新总价
            cartItemService.updateById(cartItem);
            return "success";
        }
        return "库存不足";
    }

    @RequestMapping("deleteCartItem")
    @ResponseBody
    public String deleteCart(Integer id,HttpSession session,Model model){//这个方法是根据购物车变化行为的id进行一种商品的删除操作
        User user = (User) session.getAttribute("user");
        CartItem cartItemFromDB = cartItemService.getById(id);
        cartItemService.removeById(cartItemFromDB);
//        model.addAttribute("msg", "success");
        return "success";
    }


    @RequestMapping("buy")//跳转到购买页面，此时的前提是你的购物车里有商品
    public String buy(Model model, HttpSession httpSession, Integer ...ciid){
        BigDecimal totalNum = new BigDecimal(0);
        List<CartItem> cartList = cartItemService.getCartByIds(ciid);//多个结果
        for (CartItem cartItem: cartList) {
            totalNum = totalNum.add(cartItem.getSum());
        }
        model.addAttribute("cartList",cartList);
        model.addAttribute("sum",totalNum);
        return "buy";
    }

    @RequestMapping("pay")//支付（总感觉这个应该和order订单系列写在一起）
    public String pay(Model model ,HttpSession httpSession,String oid){
        BigDecimal totalNum = new BigDecimal(0);//总价初始值
        Order order = orderService.getById(oid);
        totalNum = order.getSum();
        model.addAttribute("sum",totalNum);
        model.addAttribute("order",order);
        return "pay";

    }

    @RequestMapping("payed" )
    public String payed(Model model,String oid){
        Order order = orderService.getById(oid);
        order.setStatus(2);
        order.setPayDate(new Date());
        orderService.updateById(order);
        model.addAttribute("order",order);
        return "payed";

    }
}


